package com.czg.jsonschema2lombokpojo.rules;

import com.czg.jsonschema2lombokpojo.Schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.sun.codemodel.JDocComment;
import com.sun.codemodel.JDocCommentable;

/**
 * 应用“title”属性。
 * 
 */
public class TitleRule implements Rule<JDocCommentable, JDocComment> {

    protected TitleRule() {
    }

    /**
     * 应用此schema规则执行所需的代码生成步骤。
     * <p>
     * 当找到标题节点并应用此规则时，标题的值将作为JavaDoc注解添加。该规则通常应用于该属性的生成字段、生成getter和生成setter。
     * <p>
     * 注意，标题总是插入到JavaDoc注解的顶部。
     * 
     * @param nodeName
     *            此标题所适用的属性的名称
     * @param node
     *            “title”schema节点
     * @param parent
     *            父节点
     * @param generatableType
     *            可注解的代码生成结构，通常是一个字段或方法，应该有这个标题
     * @return 创建的包含标题的JavaDoc注解
     */
    @Override
    public JDocComment apply(String nodeName, JsonNode node, JsonNode parent, JDocCommentable generatableType, Schema schema) {
        JDocComment javadoc = generatableType.javadoc();
        javadoc.add(0, node.asText() + "\n<p>\n");
        return javadoc;
    }

}
